package com.ayq.activiti.system.common.config;

import com.ayq.activiti.system.common.utils.RedisKit;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.io.Serializable;

/**
 * Redis配置
 *
 * @author Administrator
 */
@Configuration
@AutoConfigureAfter({RedisAutoConfiguration.class})
@Slf4j
public class RedisAutoConfiguration {
  @Bean
  public RedisTemplate<String, Serializable> redisTemplate(
      LettuceConnectionFactory connectionFactory) {
    RedisTemplate<String, Serializable> redisTemplate = new RedisTemplate<>();
    redisTemplate.setKeySerializer(new StringRedisSerializer());
    redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
    redisTemplate.setConnectionFactory(connectionFactory);
    return redisTemplate;
  }

  @Bean
  @ConditionalOnMissingBean(RedisKit.class)
  @ConditionalOnBean(RedisTemplate.class)
  public RedisKit redisKit(RedisTemplate redisTemplate) {
    RedisKit redisKit = new RedisKit(redisTemplate);
    log.info("RedisUtil [{}]", redisKit);
    return redisKit;
  }

}
